package steffen;

import marcel.Lager;
import marja.KundenArchiv;


/**
 * Stellt alle Menüpunkte mit Ihren Funktionen für das Programm bereit
 * 
 * @author Steffen Krüger
 * @version 1.0
 */
public class WSVMenü
{
    /*
     * Menüpunkt 3 (Buchung eines freien Objekts) 
     */
    private static Menüpunkt itemHandtuchBuchen = new Menüpunkt("Handtücher ausleihen", new Runnable()
    {
        public void run()
        {
            Lager lager = Lager.getInstance();
            try
            {
                lager.handtuchAusleihen(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: "),
                        Functions.intEingeben("Bitte geben Sie die Anzahl ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt itemSchwimmflügelBuchen = new Menüpunkt("Schwimmflügel ausleihen", new Runnable()
    {
        public void run()
        {
        	Lager lager = Lager.getInstance();
            try
            {
                lager.schwimmflügelAusleihen(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: "),
                        Functions.intEingeben("Bitte geben Sie die Anzahl ein: "),
                        Functions.boolEingeben("Sollen wir die Schwimmflügel für Sie aufblasen? (y/n): ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt itemSurfbretterBuchen = new Menüpunkt("Surfbretter ausleihen", new Runnable()
    {
        public void run()
        {
            Lager lager = Lager.getInstance();
            try
            {
                lager.surfbrettAusleihen(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: "),
                        Functions.intEingeben("Bitte geben Sie die Anzahl ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    public static Menü buchungEinesObjektes = new Menü(
            "Buchung eines freien Objekts", 
            true, 
            false, 
            itemHandtuchBuchen, 
            itemSchwimmflügelBuchen,
            itemSurfbretterBuchen
            );
    
    /*
     * Menüpunkt 4 (Rückgabe eines Objekts) 
     */
    private static Menüpunkt itemHandtuchZurückgeben = new Menüpunkt("Handtücher zurückgeben", new Runnable()
    {
        public void run()
        {
            Lager lager = Lager.getInstance();
            try
            {
                lager.handtuchZurückgeben(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt itemSchwimmflügelZurückgeben = new Menüpunkt("Schwimmflügel zurückgeben", new Runnable()
    {
        public void run()
        {
            Lager lager = Lager.getInstance();
            try
            {
                lager.schwimmflügelZurückgeben(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt itemSurfbretterZurückgeben = new Menüpunkt("Surfbretter zurückgeben", new Runnable()
    {
        public void run()
        {
            Lager lager = Lager.getInstance();
            try
            {
                lager.surfbrettZurückgeben(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    public static Menü rückgabeEinesObjektes = new Menü(
            "Rückgabe eines entliehenen Objekts", 
            true, 
            false, 
            itemHandtuchZurückgeben, 
            itemSchwimmflügelZurückgeben,
            itemSurfbretterZurückgeben
            );
    
    /*
     * Menüpunkt 5 (Abrechnen der bis zu dem Zeitpunkt) 
     */
    private static Menüpunkt itemHandtuchAbrechnen = new Menüpunkt("Handtuch abrechnen", new Runnable()
    {
        public void run()
        {
            Lager lager = Lager.getInstance();
            try
            {
                lager.handtuchAbrechnen(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt itemSchwimmflügelAbrechnen = new Menüpunkt("Schwimmflügel abrechnen", new Runnable()
    {
        public void run()
        {
            Lager lager = Lager.getInstance();
            try
            {
                lager.schwimmflügelAbrechnen(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt itemSurfbretterAbrechnen = new Menüpunkt("Surfbretter abrechnen", new Runnable()
    {
        public void run()
        {
            Lager lager = Lager.getInstance();
            try
            {
                lager.surfbrettAbrechnen(
                		Functions.kundenEingeben(),
                        Functions.datumEingeben("Bitte geben Sie ein Datum ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    public static Menü abrechnenEinesObjektes = new Menü(
            "Abrechnen eines entliehenen Objektes", 
            true, 
            false, 
            itemHandtuchAbrechnen,
            itemSchwimmflügelAbrechnen, 
            itemSurfbretterAbrechnen
            );
    
    /*
     * Menüpunkt 7 (Anlegen und Ändern von Kundendaten) 
     */
    private static Menüpunkt alleKundenAnzeigen = new Menüpunkt("Alle Kunden anzeigen", new Runnable()
    {
        public void run()
        {
            KundenArchiv.getInstance().gebeKundenAus();
        }
    });
    
    private static Menüpunkt kundenHinzufügen = new Menüpunkt("Kunden hinzufügen", new Runnable()
    {
        public void run()
        {
            KundenArchiv archiv = KundenArchiv.getInstance();
            try
            {
                archiv.fügeKundeHinzu(
                        Functions.stringEingeben("Bitte geben Sie einen Vornamen ein: "),
                        Functions.stringEingeben("Bitte geben Sie einen Nachnamen ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt kundenHinzufügenNr = new Menüpunkt("Kunden hinzufügen (mit Kundennummer)", new Runnable()
    {
        public void run()
        {
            KundenArchiv archiv = KundenArchiv.getInstance();
            try
            {
                archiv.fügeKundeHinzu(
                        Functions.intEingeben("Bitte geben Sie die Kundennummer ein: "),
                        Functions.stringEingeben("Bitte geben Sie einen Vornamen ein: "),
                        Functions.stringEingeben("Bitte geben Sie einen Nachnamen ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
   
    private static Menüpunkt ändernVonVorname = new Menüpunkt("Ändern eines Vornamens", new Runnable()
    {
        public void run()
        {
            KundenArchiv archiv = KundenArchiv.getInstance();
            try
            {
                archiv.ändernVonVorname(
                		Functions.kundenEingeben(),
                        Functions.stringEingeben("Bitte geben Sie einen neuen Vornamen ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt ändernVonNachname = new Menüpunkt("Ändern eines Nachnamens", new Runnable()
    {
        public void run()
        {
            KundenArchiv archiv = KundenArchiv.getInstance();
            try
            {
                archiv.ändernVonNachname(
                        Functions.kundenEingeben(),
                        Functions.stringEingeben("Bitte geben Sie einen neuen Nachnamen ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    private static Menüpunkt ändernVonKdn = new Menüpunkt("Ändern einer Kundennummer", new Runnable()
    {
        public void run()
        {
            KundenArchiv archiv = KundenArchiv.getInstance();
            try
            {
                archiv.ändernVonKundennummer(
                		Functions.kundenEingeben(),
                        Functions.intEingeben("Bitte geben Sie die neue Kundennummer ein: ")
                        );
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    public static Menü anlegenÄndernVonKunden = new Menü(
            "Anlegen und Ändern von Kundendaten", 
            true, 
            false, 
            alleKundenAnzeigen,
            kundenHinzufügen,
            kundenHinzufügenNr, 
            ändernVonVorname,
            ändernVonNachname,
            ändernVonKdn
            );
    
    /*
     * Hauptmenü
     */
    private static Menüpunkt item1 = new Menüpunkt("Auflistung der verfügbaren Leihgegenstände", new Runnable()
    {
        public void run()
        {
            System.out.println("Auflistung der verfügbaren Leihgegenstände");
            
            Lager lager = Lager.getInstance();
            
            lager.anzSchwimmflügelAusgeben(true);
            lager.anzSchwimmflügelAusgeben(false);
            
            lager.anzHandtücherAusgeben(true);
            lager.anzHandtücherAusgeben(false);
            
            lager.anzSurfbretterAusgeben(true);
            lager.anzSurfbretterAusgeben(false);
        }
    });

    private static Menüpunkt item2 = new Menüpunkt("Auflistung der ausgeliehenen Objekte, gruppiert nach Kunden", new Runnable()
    {
        public void run()
        {
            System.out.println("Auflistung der ausgeliehenen Objekte, gruppiert nach Kunden");
            
            Lager.getInstance().archivAusgeben();
        }
    });
    
    private static Menüpunkt item6 = new Menüpunkt("Auflistung der mit einem Kunden durchgeführten Ausleihvorgänge", new Runnable()
    {
        public void run()
        {
            System.out.println("Auflistung der mit einem Kunden durchgeführten Ausleihvorgänge");
            
            Lager lager = Lager.getInstance();
            try
            {
                lager.archivAusgeben(Functions.kundenEingeben(), true);
            } catch (WSVException e)
            {
                e.printMessage();
            }
        }
    });
    
    public static Menü Hauptmenü = new Menü(
            "Hauptmenü", 
            item1, 
            item2, 
            buchungEinesObjektes, 
            rückgabeEinesObjektes, 
            abrechnenEinesObjektes, 
            item6, 
            anlegenÄndernVonKunden);
}